FB Where a NULL

Otázka od: Jan Harman

9. 6. 2004 19:03

Zdravim vsechny,

v sloupci TYPZ mam bud 'C' nebo null. Chtel jsem pouzit toto:

...where (TYPZ = 'C')... = funguje OK, vrati jen radky kde TYPZ obsahuje
'C'.

pokud pouzijem opak:
... where NOT (TYPZ = 'C')... = nevrati nic.

vim ze bych mohl pouzit
where (TYPZ IS NULL), ale chci to mit nachystane i pro pristi verze kde muze
byt TYPZ i jina hodnota nez 'C'

Co je vysledkem kdyz je ve sloupci hodnota null?
Diky.
Honza


Odpovedá: Pavel Cisar

9. 6. 2004 20:03

Haj hou!

On 9 Jun 2004 at 19:43, Jan Harman wrote:

> v sloupci TYPZ mam bud 'C' nebo null. Chtel jsem pouzit toto:
>
> ...where (TYPZ = 'C')... = funguje OK, vrati jen radky kde TYPZ obsahuje
> 'C'.
>
> pokud pouzijem opak:
> ... where NOT (TYPZ = 'C')... = nevrati nic.

Ze nic nevraci je spravne.
 
> vim ze bych mohl pouzit
> where (TYPZ IS NULL), ale chci to mit nachystane i pro pristi verze kde muze
> byt TYPZ i jina hodnota nez 'C'

Pokud chces vypsat hodnoty s NULL, pak jiny zpusob neexistuje.

> Co je vysledkem kdyz je ve sloupci hodnota null?

NULL   Jinak NULL je stav, nikoliv hodnota, znamena absenci hodnoty.

S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase


Odpovedá: Petr Jarkovsky

9. 6. 2004 21:23

Jestli te dobre chapu, tak preci muzes pouzit
"where TYPZ <> 'C' OR TYPZ IS
NULL"

Petr Jarkovsky


-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On Behalf
Of Jan Harman

Zdravim vsechny,

v sloupci TYPZ mam bud 'C' nebo null. Chtel jsem pouzit toto:

...where (TYPZ = 'C')... = funguje OK, vrati jen radky kde TYPZ obsahuje 'C'.

pokud pouzijem opak:
... where NOT (TYPZ = 'C')... = nevrati nic.

vim ze bych mohl pouzit
where (TYPZ IS NULL), ale chci to mit nachystane i pro pristi verze kde muze
byt
TYPZ i jina hodnota nez 'C'

Co je vysledkem kdyz je ve sloupci hodnota null?
Diky.
Honza



Odpovedá: Jan Harman

9. 6. 2004 21:43

> > v sloupci TYPZ mam bud 'C' nebo null. Chtel jsem pouzit toto:
> >
> > ...where (TYPZ = 'C')... = funguje OK, vrati jen radky kde TYPZ obsahuje
> > 'C'.
> >
> > pokud pouzijem opak:
> > ... where NOT (TYPZ = 'C')... = nevrati nic.
>
> Ze nic nevraci je spravne.
>
> > vim ze bych mohl pouzit
> > where (TYPZ IS NULL), ale chci to mit nachystane i pro pristi verze kde
muze
> > byt TYPZ i jina hodnota nez 'C'
>
> Pokud chces vypsat hodnoty s NULL, pak jiny zpusob neexistuje.
>
> > Co je vysledkem kdyz je ve sloupci hodnota null?
>
> NULL   Jinak NULL je stav, nikoliv hodnota, znamena absenci hodnoty.

Takze NOT NULL je zase NULL, jestli tomu dobre rozumim.

Honza


Odpovedá: Pavel Malinsky

10. 6. 2004 6:02

> -----Original Message-----
> From: delphi-l-owner@clexpert.cz
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Jan Harman
>
> >
> > NULL   Jinak NULL je stav, nikoliv hodnota, znamena
> absenci hodnoty.
>
> Takze NOT NULL je zase NULL, jestli tomu dobre rozumim.

Ahoj,

ne, NOT NULL znamena, ze testujes pritomnost
hodnoty(jakekoli).

          S pozdravem a dikem
=====================================
> Pavel Malinsky; malinsky@pmcom.cz <
=====================================
> GSM: 602 652 203 | ICQ: 322015967 <
=====================================



Odpovedá: petr palicka

10. 6. 2004 6:39

Ahoj,

>>Takze NOT NULL je zase NULL, jestli tomu dobre rozumim.

> ne, NOT NULL znamena, ze testujes pritomnost
> hodnoty(jakekoli).

   Ja bych dodal, ze zachazeni s NULL je naprosto
zakladni zalezitost pri praci s databazemi (SQL).
Sam jsem si nekolikrat nabil usta a i ted cas od
casu opomenu ze pokud neni sloupec NOT NULL, tak
s timto stavem _musim_ pocitat ve vsech podminkach.
   Doporucuju nejakou sikovnou knizku s priklady.
Me osobne hodne pomohlo nejaky mistrovstvi MSSQL 6.5

Peca

Odpovedá: Lebeda David

10. 6. 2004 7:21

> ...where (TYPZ = 'C')... = funguje OK, vrati jen radky kde TYPZ
> obsahuje 'C'.
>
> pokud pouzijem opak:
> ... where NOT (TYPZ = 'C')... = nevrati nic.
>
> Co je vysledkem kdyz je ve sloupci hodnota null?

Ahoj,

hodnotu NULL si muzes pro sebe prelozit jako "neni znamo" nebo "mozna".
Dostavas
se tak do trihodnotove logiky! Vysledek kazde operace muze byt TRUE, FALSE a
NULL, kde to NULL ma vyznam uvedeny v prvni vete. Problem je v tom, ze v
prikazu IF
se podminka musi vzdy vyhodnotit dvouhodnotove - tj. musi byt bud TRUE, tj.
podminka
je splnena nebo FALSE, podminka neni splnena. Nabyva-li podminka hodnotu NULL,
chape se to jako jeji nesplneni. Aplikace logickeho operatoru NOT na podminku,
jejimz
vysledkem je NULL, dava opet NULL a IF to proto interpretuje tak, ze podminka
neni
splnena.

plati:

TRUE or NULL = TRUE (druhy operand nemuze vysledek nikdy zmenit)
FALSE and NULL = FALSE (dtto)

V ostatnich pripadech logickych operaci, kde jeden clen je NULL, je i vysledek
NULL.

Podobne i porovnani cislo > NULL se vyhodnoti jako NULL, cislo <= NULL taktez.
V IFu
jsou obe tyto podminky nesplneny.

David Lebeda